package cn.tedu.myboot51.controller;

import cn.tedu.myboot51.entity.Image;
import cn.tedu.myboot51.mapper.ImageMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@RestController
public class ImageController {
    @Autowired(required = false)
    ImageMapper mapper;

    @RequestMapping("/upload")
    public void upload(Image image, MultipartFile picFile) throws IOException {
        System.out.println("image = " + image + ", picFile = " + picFile);
        //上传文件时,要先得到  文件名  才能上传
        String fileName = picFile.getOriginalFilename();
        //其次,还要得到文件的  后缀名(.jpg)  知道类型
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        System.out.println("后缀名="+suffix);
        //得到唯一的文件名 UUID.randomUUID()得到一个16进制的唯一标识符
        //文件被用户得到后,会被命名为不同的文件名,  这里得到最开始唯一的文件名
        fileName = UUID.randomUUID()+suffix;
        System.out.println(fileName);
        //文件名知道后,要准备保存文件的路径,找到"路"才能去保存文件
        //我准备保存文件到这里(文件夹)
        String dirPath = "E:/upload";
        //创建一个表示 文件夹 的 文件对象
        File dirFile = new File(dirPath);
        //判断有没有这个文件夹,没有就创建一个
        if(!dirFile.exists()){
            dirFile.mkdirs();
        }
        //最后,得出文件要保存的地方,即得到完整的文件路径
        String filePath = dirPath+"/"+fileName;
        //把文件保存到这个路径里面
        picFile.transferTo(new File(filePath));


        //数据库中,把图片(绝对)路径   得到路径
        image.setUrl("/"+fileName);
        //保存到Image对象中
        mapper.insert(image);
    }

    @RequestMapping("/select")
    public List<Image> select(){
        return mapper.select();
    }

    @RequestMapping("/delete")
    public void delete(int id){
        //通过图片id查询图片，       得到一个图片对象
        Image image = mapper.selectById(id);
        //得到图片文件的完整磁盘路径
        String filePath = "F:/upload"+image.getUrl();
        //删除文件
        new File(filePath).delete();
        //删除数据库中的数据
        mapper.delete(id);
    }
}
